#ifndef __STC15_DELAY_H
#define __STC15_DELAY_H	

#include <STC15X.h>

#ifndef SYS_CLK 
#define SYS_CLK 11059200L
#endif

void delay1ms();			//延迟1毫秒
void delay(uint16 time);	//延迟time毫秒

#if (SYS_CLK == 24000000)
void delay1us();			//延迟1微秒
void delay5us();			//延迟5微秒
void delay10us();			//延迟10微秒
void delay50us();			//延迟50微秒
void delay100us();			//延迟100微秒



//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()		//@24.000MHz
{
	uint8 i;
	_nop_();
	_nop_();
	i = 3;
	while (--i);
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()		//@24.000MHz
{
	uint8 i;
	_nop_();
	_nop_();
	i = 27;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()		//@24.000MHz
{
	uint8 i;
	_nop_();
	_nop_();
	i = 57;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()		//@24.000MHz
{
	uint8 i, j;

	i = 2;
	j = 39;
	do
	{
		while (--j);
	} while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()		//@24.000MHz
{
	uint8 i, j;

	i = 3;
	j = 82;
	do
	{
		while (--j);
	} while (--i);
}



#elif (SYS_CLK == 12000000)
    
void delay1us();			//延迟1微秒
void delay5us();			//延迟5微秒
void delay10us();			//延迟10微秒
void delay50us();			//延迟50微秒
void delay100us();			//延迟100微秒

//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()		//@12.000
{
	_nop_();
    _nop_();
    _nop_();
    _nop_();
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()		//@12.000
{
	uint8 i;
    _nop_();
    _nop_();
	i = 12;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()		//@12.000
{
	uint8 i;
    _nop_();
    _nop_();
	i = 27;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()		//@12.000
{
	uint8 i, j;

	i = 1;
	j = 146;
	do
	{
		while (--j);
	} while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()		//@12.000
{
	uint8 i, j;

	i = 2;
	j = 39;
	do
	{
		while (--j);
	} while (--i);
}

#elif (SYS_CLK == 5529600)
    
void delay1us();			//延迟1微秒
void delay5us();			//延迟5微秒
void delay10us();			//延迟10微秒
void delay50us();			//延迟50微秒
void delay100us();			//延迟100微秒

//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()		//@5.5296
{
	_nop_();
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()		//@5.5296
{
	uint8 i;
    _nop_();
    _nop_();
	i = 4;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()		//@5.5296
{
	uint8 i;
	_nop_();
	i = 11;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()		//@5.5296
{
	uint8 i;
    _nop_();
    _nop_();
	i = 66;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()		//@5.5296
{
	uint8 i, j;
    _nop_();
	i = 1;
	j = 134;
	do
	{
		while (--j);
	} while (--i);
}

#else //11059200

void delay1us();			//延迟1微秒
void delay5us();			//延迟5微秒
void delay10us();			//延迟10微秒
void delay50us();			//延迟50微秒
void delay100us();			//延迟100微秒

//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()		//@11.0592
{
	_nop_();
    _nop_();
    _nop_();
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()		//@11.0592
{
	uint8 i;
	_nop_();
	i = 11;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()		//@11.0592
{
	uint8 i;
	_nop_();
	i = 25;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()		//@11.0592
{
	uint8 i, j;
    _nop_();
	i = 1;
	j = 134;
	do
	{
		while (--j);
	} while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()		//@11.0592
{
	uint8 i, j;
    _nop_();
    _nop_();
	i = 2;
	j = 15;
	do
	{
		while (--j);
	} while (--i);
}

#endif

//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()	//1毫秒@sys_clk
{
   uint8 ms = 1;
   uint16 i;
	 do{
	      i = SYS_CLK / 13000;
		  while(--i)	;   //14T per loop
     }while(--ms);
}

//========================================================================
// 描述: 延迟指定毫秒.
// 参数: 延迟时间（1-65535）.
// 返回: none.
//========================================================================
void delay(uint16 time)
{
  if(time < 1)
  {
	  time = 1;
  }	
  do { delay1ms();} while (--time);
}

#endif		//delay.h